package com.gxa.ticket.service;


import dto.ResultDTO;


import com.gxa.ticket.param.FlightParam;
import dto.ResultDTO;
import entity.Flight;
import entity.MacOrder;

import java.util.List;

/**
 * 航班表(Flight)表服务接口
 *
 * @author makejava
 * @since 2021-05-10 18:44:33
 */
public interface FlightService {

    /**
     * 通过ID查询单条数据
     *
     * @param flightId 主键
     * @return 实例对象
     */
    Flight queryById(Integer flightId);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<Flight> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param flight 实例对象
     * @return 实例对象
     */
    Flight insert(Flight flight);

    /**
     * 修改数据
     *
     * @param flight 实例对象
     * @return 实例对象
     */
    Flight update(Flight flight);

    /**
     * 通过主键删除数据
     *
     * @param flightId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer flightId);

    /**
     * 搜素航班
     * @param flightParam
     * @return
     */
    ResultDTO findByCondition(FlightParam flightParam);

    /**
     * 查询机票是否存在
     * @param flightId :id
     * @return
     */
    ResultDTO findByFlightId(Integer flightId);


    /**
     * 根据机票id 查询库存是否 >0 ,大于就减1
     * @param flightId：机票id
     * @return
     */
    ResultDTO selectCount(Integer flightId);

    /**
     * 根据机票id查询，并减库存
     * @param orderList
     * @return
     */
    ResultDTO findByFlightId(List<MacOrder> orderList);

    /**
     * 查询所有航空公司
     * @return
     */
    ResultDTO findAllAirline();

    /**
     * 航空公司的筛选
     * @param airportIds
     * @return
     */
    ResultDTO findByAirport(Integer[] airportIds);

    /**
     * 出发时间的筛选
     * @param timeIds
     * @return
     */
    ResultDTO findByStartTime(Integer[] timeIds);

    /**
     * 起飞时间升序
     * @return
     */
    ResultDTO startTimeAsc(FlightParam flightParam);

    /**
     * 起飞时间降序
     * @return
     */
    ResultDTO startTimeDesc(FlightParam flightParam);

    /**
     * 降落时间升序
     * @return
     */
    ResultDTO endTimeAsc(FlightParam flightParam);

    /**
     * 降落时间降序
     * @return
     */
    ResultDTO endTimeDesc(FlightParam flightParam);


    /**
     * 航班时长的升序
     * @return
     */
    ResultDTO totalTimeAsc(FlightParam flightParam);

    /**
     * 航班时长的降序
     * @param flightParam
     * @return
     */
    ResultDTO totalTimeDesc(FlightParam flightParam);

    /**
     * 价格升序
     * @return
     */
    ResultDTO priceAsc(FlightParam flightParam);

    /**
     * 价格降序
     * @return
     */
    ResultDTO priceDesc(FlightParam flightParam);

    /**
     * 查询城市
     * @return
     */
    ResultDTO findCity();


    ResultDTO findAllFlight();


    ResultDTO findFlightList(Integer[] flightIds);


}
